#ifndef WG_SCHEDULER_HEADER
#define WG_SCHEDULER_HEADER

/**
 * Scheduler Prototypes and Type Definitions
 */
typedef struct event event;
typedef struct schedule schedule;
typedef struct schedule_list schedule_list;

struct event {
  struct timeval *timestamp;
  event* next;
  void (*job) (void *);
  void * args;
};

struct schedule {
  event* head;
};

struct schedule_list {
  schedule_list *next;
  unsigned long int key;
  schedule *s;
};

schedule * sort_schedule(schedule *);
void add_to_schedule(schedule *, event *);
void schedule_event(event *);
event * next_event();
int has_event();

void setup_schedule();
schedule *get_schedule();

event * listsort(event *);

#endif
